home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / DebugTool_111.lha / srctree.c < prev    next >
C/C++ Source or Header  |  1992-11-01  |  2KB  |  105 lines

  1. #include "frobnitz.h"
  2.  
  3. int depth = 0;
  4. byte was_chained[MAXNUM_OBJECT];
  5.  
  6. /*******************************************************************/
  7. /*  Funktion: PrintTree                                            */
  8. /*******************************************************************/
  9.  
  10. void
  11. PrintTree (void)
  12. {
  13.   byte first;
  14.   unsigned long i;
  15.  
  16.   printf ("OBJECT TREE:\n\n");
  17.  
  18.   if (!(objects_read))
  19.     ReadObjects ();
  20.  
  21.   printf ("%d objects:\n", objects_count);
  22.  
  23.   for (i = 0; i < objects_count; i++)
  24.     {
  25.       if ((old_header) ? (!object_table[i][4]) : (!((object_table[i][6] * 256) + object_table[i][7])))
  26.     {
  27.       ChainObj (i);
  28.       newline ();
  29.       depth = 0;
  30.     }
  31.     }
  32.  
  33.   first = 1;
  34.   for (i = 0; i < objects_count; i++)
  35.     {
  36.       if (was_chained[i] == 0)
  37.     {
  38.       printf ("%s", (first ? "Closed chains:\n" : "\n"));
  39.       first = 0;
  40.  
  41.       printf ("\n ... : ...\t(...)\n");
  42.       depth = 1;
  43.       ChainObj (i);
  44.       newline ();
  45.     }
  46.     }
  47. }
  48.  
  49. /*****************************************************************/
  50. /*   Funktion: ChainObj                                          */
  51. /*****************************************************************/
  52.  
  53. void
  54. ChainObj (unsigned long i)
  55. {
  56.   int j, k;
  57.   byte first;
  58.  
  59.   for (j = 0; j < depth; j++)
  60.     printf ("\t");
  61.  
  62.   PrintObject (i);
  63.  
  64.   if (!no_attr)
  65.     {
  66.       first = 1;
  67.  
  68.       for (j = 0; j < ((old_header) ? 4 : 6); j++)
  69.     {
  70.       for (k = 7; k >= 0; k--)
  71.         {
  72.           if ((object_table[i][j] >> k) & 1)
  73.         {
  74.           printf ("%s%d", (first ? "\t(" : ","), ((7 - k) + (j * 8)));
  75.           first = 0;
  76.         }
  77.         }
  78.     }
  79.       printf ("%s", (first ? "" : ")"));
  80.     }
  81.  
  82.   newline ();
  83.  
  84.   if (was_chained[i] == 1)
  85.     {
  86.       printf ("Warning: Object already chained!\n");
  87.       depth--;
  88.       return;
  89.     }
  90.   else
  91.     was_chained[i] = 1;
  92.  
  93.   if ((old_header) ? object_table[i][6] : ((object_table[i][10] * 256) + object_table[i][11]))
  94.     {
  95.       depth++;
  96.       ChainObj ((old_header) ? (object_table[i][6] - 1) : (((object_table[i][10] * 256) + object_table[i][11]) - 1));
  97.     }
  98.   if ((old_header) ? object_table[i][5] : (((object_table[i][8] * 256) + object_table[i][9]) != 0))
  99.     {
  100.       ChainObj ((old_header) ? (object_table[i][5] - 1) : (((object_table[i][8] * 256) + object_table[i][9]) - 1));
  101.     }
  102.   else
  103.     depth--;
  104. }
  105.